#ifndef __Serial_Port_Analysis_H
#define __Serial_Port_Analysis_H 

#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <math.h>
#include <stdio.h>


#define HEADER 0xAA
#define FOOTER 0x2F


typedef struct {
    uint8_t* data;
    size_t length;
} Packet;

typedef struct {
    Packet* packets;
    size_t count;
} PacketList;

typedef struct {
    uint8_t header;         // 包头
    uint8_t length;         // 长度
    uint8_t command;        // 命令
    char sign_unit[8];      // 正负+单位
    uint8_t decimal;        // 小数位
    float net_weight;       // 净重
    char stability[16];     // 稳定状态
    float tare;             // 皮重
    uint8_t checksum;       // 校验码
    char ACK[16];            // 响应状态
    uint8_t footer;         // 包尾
    // 基础字段
} ParsedPacket;


typedef struct {
    uint8_t ACK;         // 响应状态
 
    // 增加字段
} ADD_ParsedPacket;

/* 新增结构体定义（放在文件开头）*/
#pragma pack(1) // 按1字节对齐
typedef struct {
    uint8_t header;      // 0xAA
    uint8_t length;      // 数据长度
    uint8_t cmd;         // 0x20
    uint8_t sign_unit;   // 正负+单位
    uint8_t decimal;     // 小数位
    uint32_t net_weight; // 大端格式净重
    uint8_t stable;      // 稳定状态
    uint8_t tare[3];     // 3字节皮重
    uint8_t checksum;    // 校验码
    uint8_t footer;      // 0x2F
} WeightProtocol;
#pragma pack()
/* 新增解析函数 */


//函数/////////////////////////////////////////

/////////////////添加串口解析命令函数

// 十六进制字符串转字节数组
uint8_t* hex_str_to_bytes(const char* hex_str, size_t* out_len);

// 数据包分割（改进版）
PacketList split_packets(const uint8_t* data, size_t len);
// 解析单个数据包（支持多命令）
ParsedPacket parse_packet(const uint8_t* data, size_t len);

// 解析数据包,打印结果
void print_packet(const ParsedPacket* pkt);


/////////////////




#endif

